package com.dragon.codefx.service;

import com.dragon.codefx.config.SystemTrayManager;
import javafx.application.Platform;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Service;

import java.util.concurrent.CompletableFuture;

/**
 * 应用程序退出服务
 * 负责安全地关闭应用程序，避免卡死问题
 *
 * @author lsc
 * @since 2025/9/26
 */
@Service
public class ApplicationExitService {

    @Autowired
    private SystemTrayManager systemTrayManager;

    @Autowired
    private ConfigurableApplicationContext applicationContext;

    /**
     * 安全退出应用程序
     */
    public void exitApplication() {
        // 在后台线程中执行关闭操作，避免阻塞JavaFX线程
        CompletableFuture.runAsync(() -> {
            try {
                // 清理托盘资源
                if (systemTrayManager != null) {
                    systemTrayManager.cleanup();
                }
                // 关闭Spring容器
                if (applicationContext != null) {
                    applicationContext.close();
                }
                // 在JavaFX线程上执行Platform.exit()
                Platform.runLater(Platform::exit);
                // 等待一小段时间确保资源清理完成
                Thread.sleep(500);
                System.out.println("退出程序...");
                // 强制退出
                System.exit(0);
            } catch (Exception e) {
                System.err.println("关闭程序时发生错误: " + e.getMessage());
                e.printStackTrace();
                // 即使出错也要强制退出
                System.exit(1);
            }
        });
    }

    /**
     * 立即强制退出（紧急情况使用）
     */
    public void forceExit() {
        System.out.println("强制立即退出应用程序...");
        try {
            if (systemTrayManager != null) {
                systemTrayManager.cleanup();
            }
            Platform.exit();
        } catch (Exception e) {
            System.err.println("强制退出时出错: " + e.getMessage());
        } finally {
            System.exit(0);
        }
    }
}